"""
更新支付宝网关地址为新版本沙箱环境
根据支付宝开放平台显示的新网关地址更新配置
"""
import os
import sys
from pathlib import Path

# 设置 Windows 控制台编码
if sys.platform == 'win32':
    try:
        sys.stdout.reconfigure(encoding='utf-8')
    except:
        pass

# 切换到项目目录
os.chdir(Path(__file__).parent)

# 新版本沙箱网关地址（从支付宝开放平台获取）
NEW_SANDBOX_GATEWAY = "https://openapi-sandbox.dl.alipaydev.com/gateway.do"
# 从图片中看到的 APPID
NEW_APP_ID = "9021000157661754"

print("=" * 60)
print("支付宝新版本沙箱环境配置更新工具")
print("=" * 60)
print()

# 读取.env文件
env_file = Path('.env')
if not env_file.exists():
    print("[X] 错误: .env 文件不存在")
    print("   请先创建 .env 文件")
    sys.exit(1)

lines = []
with open(env_file, 'r', encoding='utf-8') as f:
    lines = f.readlines()

# 更新配置
new_lines = []
gateway_updated = False
app_id_updated = False

for line in lines:
    original_line = line
    
    # 更新网关地址
    if line.startswith('ALIPAY_GATEWAY='):
        old_gateway = line.strip().split('=', 1)[1] if '=' in line else ''
        # 检查是否需要更新
        if NEW_SANDBOX_GATEWAY not in old_gateway:
            new_lines.append(f'ALIPAY_GATEWAY={NEW_SANDBOX_GATEWAY}\n')
            gateway_updated = True
            print(f"[OK] 已更新网关地址")
            print(f"     旧地址: {old_gateway}")
            print(f"     新地址: {NEW_SANDBOX_GATEWAY}")
        else:
            new_lines.append(line)
            print(f"[OK] 网关地址已是最新版本: {old_gateway.strip()}")
    # 更新 APPID（可选，仅当用户需要时）
    elif line.startswith('ALIPAY_APP_ID='):
        old_app_id = line.strip().split('=', 1)[1] if '=' in line else ''
        # 如果 APPID 为空或不同，提示用户
        if not old_app_id or old_app_id != NEW_APP_ID:
            print(f"[!] 检测到 APPID: {old_app_id if old_app_id else '(未配置)'}")
            print(f"    支付宝平台显示的 APPID: {NEW_APP_ID}")
            print(f"    是否更新？(y/n): ", end='')
            # 自动更新（如果为空）
            if not old_app_id:
                new_lines.append(f'ALIPAY_APP_ID={NEW_APP_ID}\n')
                app_id_updated = True
                print("y (自动更新，因为未配置)")
            else:
                # 如果已配置，保持原值
                new_lines.append(line)
                print("n (保持原值)")
        else:
            new_lines.append(line)
            print(f"[OK] APPID 已配置: {old_app_id}")
    else:
        new_lines.append(line)

# 写回文件
with open(env_file, 'w', encoding='utf-8', newline='\n') as f:
    f.writelines(new_lines)

print()
print("=" * 60)
if gateway_updated or app_id_updated:
    print("[OK] 配置更新完成！")
    print()
    print("重要提示：")
    print("1. 新版本沙箱环境已启用，请确保使用新的网关地址")
    print("2. 如果仍有 502 错误，请检查：")
    print("   - 支付宝开放平台是否有维护公告")
    print("   - 网络连接是否正常")
    print("   - 沙箱应用状态是否正常")
    print("3. 建议重启应用服务器以使配置生效")
else:
    print("[OK] 配置已是最新版本，无需更新")
print("=" * 60)



